package com.young.rabbitmq.ttl;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.young.rabbitmq.util.ConnectionUtil;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException;

public class TtlQueue {

    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = ConnectionUtil.buildConnection();
        Channel channel = connection.createChannel();
        // 声明DIRECT 类型的交换机
        channel.exchangeDeclare("TTL_EXCHANGE",BuiltinExchangeType.DIRECT);

        // 创建map对象，里面存放一些用于创建队列的一些属性
        Map<String,Object> map = new HashMap<>();
        // 通过该属性可以将队列声明为一个带有过期时间的队列
        map.put("x-message-ttl",30000);
        // 声明队列并指定创建队列的一些属性
        channel.queueDeclare("TTL_QUEUE", true, false, false, map);
        // 绑定队列和交换机
        channel.queueBind("TTL_QUEUE","TTL_EXCHANGE","ttl");

        // 发送消息
        channel.basicPublish("TTL_EXCHANGE","ttl",null,"发往过期队列的消息".getBytes(StandardCharsets.UTF_8));

        // 9、关闭资源
        channel.close();
        connection.close();
    }
}
